﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SMA.GENTEv1.Dados;

namespace SMA.GENTEv1
{
    public class PessoaDocCTPS
    {
        #region Variaveis Membro
        private int _idCTPS;
        private int _idPessoa;
        private string _numero;
        private string _serie;
        private string _emissor;
        private DateTime _dataExpedicao;
        private string _path;
        private GENTEEntities _context;
        #endregion

        #region Parametros
        public int IdCTPS
        {
            get { return _idCTPS; }
            set { _idCTPS = value; }
        }
        public int IdPessoa
        {
            get { return _idPessoa; }
            set { _idPessoa = value; }
        }
        public string Numero
        {
            get { return _numero; }
            set { _numero = value; }
        }
        public string Serie
        {
            get { return _serie; }
            set { _serie = value; }
        }
        public string Emissor
        {
            get { return _emissor; }
            set { _emissor = value; }
        }
        public DateTime DataExpedicao
        {
            get { return _dataExpedicao; }
            set { _dataExpedicao = value; }
        }
        public string Path
        {
            get { return _path; }
            set { _path = value; }
        }
        #endregion

        #region Construtores
        public PessoaDocCTPS()
        {
            try
            {
                _context = new GENTEEntities();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public PessoaDocCTPS(int idCTPS)
        {
            try
            {
                _context = new GENTEEntities();
                Carregar(idCTPS);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Privados
        protected void Carregar(int idCTPS)
        {
            try
            {
                var consulta = from ctps in _context.tab_pessoa_documento_ctps
                               where ctps.id_pessoa_ctps == idCTPS
                               select new
                               {
                                   ctps.id_pessoa_ctps,
                                   ctps.tab_pessoa.Id_pessoa,
                                   ctps.numero_ctps,
                                   ctps.serie_ctps,
                                   ctps.emissor,
                                   ctps.dt_expedicao,
                                   ctps.path
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this.IdCTPS = list.id_pessoa_ctps;
                    this.IdPessoa = list.Id_pessoa;
                    this.Numero = list.numero_ctps;
                    this.Serie = list.serie_ctps;
                    this.Emissor = list.emissor;
                    this.DataExpedicao = list.dt_expedicao;
                    this.Path = list.path;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        protected void RecuperaId()
        {
            try
            {
                var consulta = from ctps in _context.tab_pessoa_documento_ctps
                               where ctps.tab_pessoa.Id_pessoa == this.IdPessoa
                               && ctps.numero_ctps == this.Numero
                               && ctps.serie_ctps == this.Serie
                               && ctps.emissor == this.Emissor
                               orderby ctps.id_pessoa_ctps descending
                               select ctps;

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this.IdCTPS = list.id_pessoa_ctps;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos Publicos

        #region Metodos de Selecao
        public List<PessoaDocCTPS> SelectAll()
        {
            try
            {
                List<PessoaDocCTPS> listPessoaDocCTPS = new List<PessoaDocCTPS>();

                var consulta = from ctps in _context.tab_pessoa_documento_ctps
                               select new
                               {
                                   ctps.id_pessoa_ctps,
                                   ctps.tab_pessoa.Id_pessoa,
                                   ctps.numero_ctps,
                                   ctps.serie_ctps,
                                   ctps.emissor,
                                   ctps.dt_expedicao,
                                   ctps.path
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    PessoaDocCTPS ctps = new PessoaDocCTPS();
                    ctps.IdCTPS = list.id_pessoa_ctps;
                    ctps.IdPessoa = list.Id_pessoa;
                    ctps.Numero = list.numero_ctps;
                    ctps.Serie = list.serie_ctps;
                    ctps.Emissor = list.emissor;
                    ctps.DataExpedicao = list.dt_expedicao;
                    ctps.Path = list.path;

                    listPessoaDocCTPS.Add(ctps);
                }

                return listPessoaDocCTPS;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<PessoaDocCTPS> SelectPorPessoa(int idPessoa)
        {
            try
            {
                List<PessoaDocCTPS> listPessoaDocCTPS = new List<PessoaDocCTPS>();

                var consulta = from ctps in _context.tab_pessoa_documento_ctps
                               where ctps.tab_pessoa.Id_pessoa == idPessoa
                               select new
                               {
                                   ctps.id_pessoa_ctps,
                                   ctps.tab_pessoa.Id_pessoa,
                                   ctps.numero_ctps,
                                   ctps.serie_ctps,
                                   ctps.emissor,
                                   ctps.dt_expedicao,
                                   ctps.path
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    PessoaDocCTPS ctps = new PessoaDocCTPS();
                    ctps.IdCTPS = list.id_pessoa_ctps;
                    ctps.IdPessoa = list.Id_pessoa;
                    ctps.Numero = list.numero_ctps;
                    ctps.Serie = list.serie_ctps;
                    ctps.Emissor = list.emissor;
                    ctps.DataExpedicao = list.dt_expedicao;
                    ctps.Path = list.path;

                    listPessoaDocCTPS.Add(ctps);
                }

                return listPessoaDocCTPS;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Metodos de Persistencia
        public void Salvar()
        {
            try
            {
                if (this.IdCTPS == 0)
                {
                    tab_pessoa_documento_ctps tabCTPS = new tab_pessoa_documento_ctps();
                    tabCTPS.tab_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa", "Id_pessoa", this.IdPessoa);
                    tabCTPS.numero_ctps = this.Numero;
                    tabCTPS.serie_ctps = this.Serie;
                    tabCTPS.emissor = this.Emissor;
                    tabCTPS.dt_expedicao = this.DataExpedicao;

                    _context.AddTotab_pessoa_documento_ctps(tabCTPS);
                    _context.SaveChanges();

                    RecuperaId();
                }
                else
                {
                    tab_pessoa_documento_ctps tabCTPS = (from ctps in _context.tab_pessoa_documento_ctps
                                                         where ctps.id_pessoa_ctps == this.IdCTPS
                                                         select ctps).First();

                    tabCTPS.tab_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa", "Id_pessoa", this.IdPessoa);
                    tabCTPS.numero_ctps = this.Numero;
                    tabCTPS.serie_ctps = this.Serie;
                    tabCTPS.emissor = this.Emissor;
                    tabCTPS.dt_expedicao = this.DataExpedicao;

                    _context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public void AtualizaPath()
        {
            try
            {
                if (this.IdCTPS != 0)
                {
                    tab_pessoa_documento_ctps tabCTPS = (from ctps in _context.tab_pessoa_documento_ctps
                                                         where ctps.id_pessoa_ctps == this.IdCTPS
                                                         select ctps).First();

                    tabCTPS.path = this.Path;

                    _context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #endregion
    }
}
